import socket


def start_tcp_server(host, port):
    """
    模拟 TCP 服务器，用于接收客户端发送的数据并返回响应

    Args:
        host (str): 服务器监听的 IP 地址
        port (int): 服务器监听的端口号
    """
    try:
        # 创建一个 TCP 套接字
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
            # 绑定 IP 和端口
            server_socket.bind((host, port))
            print(f"服务器已启动，正在监听 {host}:{port}")

            # 开始监听
            server_socket.listen(5)  # 最大等待连接数为 5
            print("等待客户端连接...")

            while True:
                # 接受客户端连接
                client_socket, client_address = server_socket.accept()
                print(f"与客户端 {client_address} 建立连接")

                with client_socket:
                    while True:
                        # 接收数据
                        data = client_socket.recv(1024)  # 接收 1024 字节
                        if not data:  # 如果接收到空数据，说明客户端断开连接
                            print(f"客户端 {client_address} 断开连接")
                            break

                        print(f"收到数据: {data.decode('utf-8')}")

                        # 发送响应给客户端
                        response = "服务器已收到数据".encode("utf-8")
                        client_socket.sendall(response)
                        print("已发送响应")
    except Exception as e:
        print(f"服务器发生错误: {e}")


# 启动服务器
if __name__ == "__main__":
    # 监听地址和端口
    SERVER_HOST = "127.0.0.1"
    SERVER_PORT = 9999

    start_tcp_server(SERVER_HOST, SERVER_PORT)
